home *** CD-ROM | disk | FTP | other *** search
- 'Written by Bill Slamer
- 'Declare all Sub Procedures
- DECLARE SUB Printrecords()
- DECLARE SUB Showmenu()
- DECLARE SUB Loadeditfield()
- DECLARE SUB Updaterec()
- DECLARE SUB Editcustomer()
- DECLARE SUB Openfiles()
- DECLARE SUB Sortindex()
- DECLARE SUB Showcustomers()
- DECLARE SUB Deleterecord()
- DECLARE SUB Checkfordups()
- DEFINT A-Z
- 'Include anything that the program will use
- $INCLUDE"ArrowKey.Inc"
- COLOR 15, 1: CLS
-
- SHARED N$(), N(), Fielddesc$(), Fieldlen(),Deleted()
- SHARED Editfield$(), MenuRow, Currec, Menu$(), Y$,Deleted
- SHARED Maxrows, Row, Currtop, Extnd, Arraylocation
- 'Dim all arrays
- DIM N$(1500), N(1500), Fielddesc$(10), Fieldlen(10)
- DIM Editfield$(10), Menu$(10), Deleted(50)
- CLS
- 'Define how the record will look
- Type Customerrecord
- 'Define the fields in the record
- Company AS String * 30
- Contact AS String * 30
- Address1 AS String * 30
- Address2 AS String * 30
- City AS String * 15
- State AS String * 2
- Zip AS String * 10
- Phone AS String * 13
- Fax AS String * 13
- Date AS String * 10
- END Type
- 'Set aside memory for the record
- DIM Custrec AS Customerrecord
- SHARED Custrec
- '*** load Menu Selctions
- DATA View all customers, Edit a customer record
- DATA Add a customer record,Print all customer records,Quit
- FOR X = 1 TO 5
- READ Menu$(X)
- Menu$(X) = LEFT$(" " + Menu$(X) + SPACE$(50), 50)
- NEXT
- '*** load Array With Record Field descriptions
- FOR X = 1 TO 10: READ Fielddesc$(X), Fieldlen(X): NEXT
- DATA Company,30,Contact,30,Address1,30,Address2,30,City,15,State,2
- DATA Zip,10,Phone,14,Fax,14,Date,10
- Openfiles 'open Any Files That Need To Be Opened
- Sortindex 'sort Index
- Showmenu 'display Menu
-
- '------------------------------------------------------------------------------
- SUB Checkfordups
- SHARED Dup,N$(),Maxrows,Editfield$()
- FOR X=1 TO Maxrows
- IF Editfield$(1)=N$(X) THEN
- Beep:Dup=1
- COLOR 15,4:LOCATE 16,16
- PRINT"The field COMPANY is a DUPLICATE, press any key";
- Z$=INPUT$(1)
- COLOR 15,1:LOCATE 16,16
- PRINT SPACE$(55);
- EXIT FOR
- END IF
- NEXT
- END SUB
-
- '------------------------------------------------------------------------------
- SUB Deleterecord
- SHARED Maxrows,Currec,N(),N$(),Deleted(),Deleted,Editfield$(),D$
- COLOR 15,4
- LOCATE 16,14:PRINT"Are you sure you want to delete this record (Y or N)";
- D$=INPUT$(1):D$=UCASE$(D$)
- COLOR 15,1
- IF D$="N" THEN
- LOCATE 16,14:PRINT SPACE$(55);
- EXIT SUB
- END IF
- FOR X=1 TO Maxrows
- IF N$(X)=Editfield$(1) THEN EXIT FOR
- NEXT
- FOR Y=X TO Maxrows
- N$(Y)=N$(Y+1)
- N(Y)=N(Y+1)
- NEXT
- Maxrows=Maxrows-1
- Loaddatafields
- Custrec.Company="DELETED"
- Put#1,Currec,Custrec
- Deleted=Deleted+1
- Deleted(Deleted)=Currec
- END SUB
-
- '------------------------------------------------------------------------------
- SUB Editcustomer
- 'This routine lets you EDIT/ADD/DELETE records
- SHARED Maxrows,Currec,N(),N$(),Deleted(),Deleted,D$,Dup,EditField$()
- COLOR 15, 1: CLS
- LOCATE 1, 60: PRINT "] Insert OFF ["
- FOR X = 1 TO 10
- COLOR 15, 1: LOCATE X + 4, 11: PRINT Fielddesc$(X)
- IF MenuRow = 3 THEN
- Editfield$(X) = SPACE$(Fieldlen(X))
- END IF
- IF MenuRow = 3 THEN Editfield$(10) = DATE$
- COLOR , 0: LOCATE X + 4, 21: PRINT Editfield$(X)
- NEXT
- IF MenuRow = 2 THEN
- LOCATE 18, 13: PRINT CHR$(24) + CHR$(25) + " " + CHR$(26) + CHR$(27) + " <Alt U>pdate <ESC> quit <Ins> <Alt D>elete"
- ELSE
- LOCATE 18, 20: PRINT CHR$(24) + CHR$(25) + " " + CHR$(26) + CHR$(27) + " <Alt S>ave <ESC> quit <Ins>"
- END IF
-
- Row = 1: Col = 1: Nooffields = 10
- DO
- COLOR 0, 7: LOCATE Row + 4, Col + 20
- PRINT MID$(Editfield$(Row), Col, 1)
- X$ = "": WHILE X$ = "": X$ = Inkey$: Wend: X$ = UCASE$(X$)
- COLOR 15, 0: LOCATE Row + 4, Col + 20
- PRINT MID$(Editfield$(Row), Col, 1)
- SELECT CASE X$
- CASE CHR$(0)+Chr$(32)
- Deleterecord
- IF D$="Y" THEN
- EXIT SUB
- END IF
- CASE Esc$
- COLOR 15, 1: CLS
- EXIT SUB
- CASE CHR$(0) + CHR$(22) 'alt U (update Record)
- '*** everything Entered Is Stored In Editfield$() array.
- IF MenuRow = 2 THEN 'make Sure Programe Is In Edit Mode
- COLOR 15, 1: CLS 'before Allowing Update.
- Loaddatafields
- Updaterec
- EXIT SUB
- END IF
- CASE CHR$(0) + CHR$(31) 'alt S (save New Record)
- '*** everything Entered Is Stored In Editfield$() array.
- IF MenuRow = 3 THEN 'make Sure Program Is In Add Mode
- Checkfordups
- IF Dup=0 THEN
- COLOR 15, 1: CLS 'before Allowing Save.
- Loaddatafields
- Maxrows=Maxrows+1
- IF Deleted>0 THEN
- Currec=Deleted(Deleted)
- Deleted=Deleted-1
- N(Maxrows) = Currec
- ELSE
- Currec = Maxrows+Deleted
- N(Maxrows) = Maxrows
- END IF
- N$(Maxrows) = Custrec.Company
- Updaterec
- Sortindex
- EXIT SUB
- ELSE
- Dup=0
- END IF
- END IF
- CASE Uparrow$
- Col = 1: Row = Row - 1: IF Row < 1 THEN Row = Nooffields
- CASE Dnarrow$, Enter$
- Col = 1: Row = Row + 1: IF Row > Nooffields THEN Row = 1
- CASE Larrow$
- Col = Col - 1: IF Col < 1 THEN Col = Fieldlen(Row)
- CASE Rarrow$
- Col = Col + 1: IF Col > Fieldlen(Row) THEN Col = 1
- CASE Pgup$
- Col = 1: Row = 1
- CASE Pgdn$
- Col = 1: Row = Nooffields
- CASE Ins$
- COLOR , 1
- IF Inc = 1 THEN
- Inc = 0: LOCATE 1, 60: PRINT "] Insert OFF ["
- ELSE
- Inc = 1: LOCATE 1, 60: PRINT "] Insert ON ["
- END IF
- COLOR , 0
- CASE Del$
- F$ = MID$(Editfield$(Row), Col + 1, Fieldlen(Row))
- F1$ = LEFT$(Editfield$(Row), Col - 1) + F$ + " "
- Editfield$(Row) = F1$
- LOCATE Row + 4, 21: PRINT Editfield$(Row)
- CASE Homek$
- Col = 1: IF Row = 5 OR Row = 6 THEN Col = 2
- CASE Endk$
- Col = Fieldlen(Row)
- CASE Bs$
- IF Col > 1 THEN
- F$ = MID$(Editfield$(Row), Col, Fieldlen(Row))
- F1$ = LEFT$(Editfield$(Row), Col - 2) + F$ + " "
- Editfield$(Row) = F1$
- Col = Col - 1: IF Col < 1 THEN Col = 1
- LOCATE Row + 4, 21: PRINT Editfield$(Row)
- END IF
- CASE > CHR$(31), < CHR$(126)
- IF Inc = 1 THEN
- F$ = MID$(Editfield$(Row), Col, Fieldlen(Row))
- F1$ = LEFT$(LEFT$(Editfield$(Row), Col - 1) + X$ + F$, Fieldlen(Row))
- Editfield$(Row) = F1$
- Col = Col + 1: IF Col > Fieldlen(Row) THEN Col = 1
- LOCATE Row + 4, 21: PRINT Editfield$(Row)
- ELSE
- MID$(Editfield$(Row), Col) = X$
- LOCATE Row + 4, 21: PRINT Editfield$(Row)
- Col = Col + 1: IF Col > Fieldlen(Row) THEN Col = 1
- END IF
- END SELECT
- LOOP
- END SUB
-
- '------------------------------------------------------------------------------
- SUB Loaddatafields
- SHARED Editfield$()
- Custrec.Company = Editfield$(1)
- Custrec.Contact = Editfield$(2)
- Custrec.Address1 = Editfield$(3)
- Custrec.Address2 = Editfield$(4)
- Custrec.City = Editfield$(5)
- Custrec.State = Editfield$(6)
- Custrec.Zip = Editfield$(7)
- Custrec.Phone = Editfield$(8)
- Custrec.Fax = Editfield$(9)
- Custrec.Date = Editfield$(10)
- END SUB
-
- '------------------------------------------------------------------------------
- SUB Loadeditfield
- SHARED Maxrows,Currec,N(),N$(),EditField$()
- Currec = N(Row + Extnd)
- Arraylocation = Row + Extnd
- GET #1, Currec, Custrec
- Editfield$(1) = Custrec.Company
- Editfield$(2) = Custrec.Contact
- Editfield$(3) = Custrec.Address1
- Editfield$(4) = Custrec.Address2
- Editfield$(5) = Custrec.City
- Editfield$(6) = Custrec.State
- Editfield$(7) = Custrec.Zip
- Editfield$(8) = Custrec.Phone
- Editfield$(9) = Custrec.Fax
- Editfield$(10) = Custrec.Date
- END SUB
-
- '------------------------------------------------------------------------------
- SUB Openfiles
- SHARED Maxrows,Currec,N(),N$(),Deleted(),Deleted
- OPEN "test.txt" FOR RANDOM AS 1 LEN = LEN(Custrec)
- FOR X = 1 TO LOF(1) / LEN(Custrec)
- GET #1, X, Custrec
- IF LEFT$(Custrec.Company,7)="DELETED" THEN
- Deleted=Deleted+1
- Deleted(Deleted)=X
- ELSE
- Maxrows = Maxrows + 1
- N$(Maxrows) = Custrec.Company
- N(Maxrows) = X
- END IF
- NEXT
- END SUB
-
- '------------------------------------------------------------------------------
- SUB Printrecords
- SHARED Maxrows,Currec,N(),N$()
- COLOR 31,1
- LOCATE 12,25:PRINT "Printing Records"
- F$ = "\ \ \ \ \ \ \ \ \\ \ \"
- LPRINT CHR$(15);
- WIDTH "lpt1:", 132
- FOR X = 1 TO LOF(1) / LEN(Custrec)
- GET #1, X, Custrec
- LPRINT USING F$; Custrec.Company; Custrec.Contact; Custrec.Address1; Custrec.City; Custrec.State; Custrec.Phone;
- NEXT
- COLOR 15,1
- END SUB
-
- '------------------------------------------------------------------------------
- SUB Showcustomers
- SHARED Maxrows,Currec,N(),N$()
- COLOR 15, 1: CLS
- COLOR 15, 2
- LOCATE 4, 3: PRINT CHR$(201) + STRING$(72, CHR$(205)) + CHR$(187)
- FOR X = 1 TO 8
- LOCATE X + 4, 3: PRINT CHR$(186) + SPACE$(72) + CHR$(186)
- NEXT
- LOCATE 12, 3: PRINT CHR$(200) + STRING$(72, CHR$(205)) + CHR$(188)
- LOCATE 6, 10: PRINT "The text in the box below will show the"
- LOCATE 7, 10: PRINT "customers you have. You can scroll through"
- LOCATE 8, 10: PRINT "them by using the ARROW keys."
- IF MenuRow = 2 THEN
- LOCATE 10, 10: PRINT "<RETURN> selects record for editing."
- END IF
- COLOR , 4
- LOCATE 14, 3: PRINT CHR$(201) + STRING$(72, CHR$(205)) + CHR$(187)
- FOR X = 1 TO 10
- LOCATE X + 14, 3: PRINT CHR$(186) + SPACE$(72) + CHR$(186);
- NEXT
- LOCATE 24, 3: PRINT CHR$(200) + STRING$(72, CHR$(205)) + CHR$(188);
- FOR X = 1 TO 9
- COLOR 15, 4: LOCATE X + 14, 5: PRINT LEFT$(N$(X) + SPACE$(70), 70);
- NEXT
- COLOR 15, 3
- LOCATE 24, 30: PRINT CHR$(24) + CHR$(25) + " <RETURN> menu";
- COLOR 15, 1
- Row = 1: Extnd = 0: Currtop = 1
- DO
- COLOR 0, 7: LOCATE Row + 14, 5
- PRINT LEFT$(N$(Row + Extnd) + SPACE$(70), 70);
- Y$ = "": WHILE Y$ = "": Y$ = Inkey$: Wend: Y$ = UCASE$(Y$)
- COLOR 15, 4: LOCATE Row + 14, 5
- PRINT LEFT$(N$(Row + Extnd) + SPACE$(70), 70);
- SELECT CASE Y$
- CASE Esc$
- COLOR 15, 1
- CLS
- EXIT SUB
- CASE Enter$
- COLOR 15, 1
- IF MenuRow = 2 THEN Loadeditfield
- CLS : EXIT SUB
- CASE Pgup$
- FOR Y = 1 TO 8
- IF Row - 1 >= 1 THEN
- Row = Row - 1
- ELSE
- IF Row = 1 AND Extnd > 0 THEN
- Currtop = Currtop - 1
- Extnd = Extnd - 1
- GOSUB SCROLLONELINEDOWN
- END IF
- END IF
- NEXT
- CASE Uparrow$
- IF Row - 1 >= 1 THEN
- Row = Row - 1
- ELSE
- IF Row = 1 AND Extnd > 0 THEN
- Currtop = Currtop - 1
- Extnd = Extnd - 1
- GOSUB SCROLLONELINEDOWN
- END IF
- END IF
- CASE Pgdn$
- FOR Y = 1 TO 8
- IF Row + 1 + Extnd <= Maxrows THEN
- Row = Row + 1
- IF Row > 9 THEN
- Currtop = Currtop + 1
- Row = 9: Extnd = Extnd + 1
- GOSUB SCROLLONELINEUP
- END IF
- END IF
- NEXT
- CASE Dnarrow$
- IF Row + 1 + Extnd <= Maxrows THEN
- Row = Row + 1
- IF Row > 9 THEN
- Currtop = Currtop + 1
- Row = 9: Extnd = Extnd + 1
- GOSUB SCROLLONELINEUP
- END IF
- END IF
- END SELECT
- LOOP
- EXIT SUB
- SCROLLONELINEUP:
- Srow = 15
- FOR X = Currtop TO Currtop + 7
- LOCATE Srow, 5: PRINT LEFT$(N$(X) + SPACE$(70), 70)
- Srow = Srow + 1
- NEXT
- RETURN
- SCROLLONELINEDOWN:
- Srow = 22
- FOR X = Currtop + 7 TO Currtop STEP -1
- LOCATE Srow, 5: PRINT LEFT$(N$(X) + SPACE$(70), 70);
- Srow = Srow - 1
- NEXT
- RETURN
- END SUB
-
- '------------------------------------------------------------------------------
- SUB Showmenu
- '*** make Menu Box
- MAKEMENU:
- DO
- CLS
- COLOR 15, 4
- LOCATE 4, 15: PRINT CHR$(201) + STRING$(50, CHR$(205)) + CHR$(187)
- LOCATE 4, 30: PRINT "[ Ziggy's Main Menu ]"
- FOR X = 1 TO 8
- LOCATE X + 4, 15: PRINT CHR$(186) + SPACE$(50) + CHR$(186)
- NEXT
-
- '*** print Menu Selections
- LOCATE 12, 15: PRINT CHR$(200) + STRING$(50, CHR$(205)) + CHR$(188)
- FOR X = 1 TO 5: LOCATE X + 5, 16: PRINT Menu$(X): NEXT
-
- MenuRow = 1: Noofselections = 5
- DO
- COLOR 0, 7: LOCATE MenuRow + 5, 16: PRINT Menu$(MenuRow)
- X$ = "": WHILE X$ = "": X$ = Inkey$: Wend: X$ = UCASE$(X$)
- COLOR 15, 4: LOCATE MenuRow + 5, 16: PRINT Menu$(MenuRow)
- SELECT CASE X$
- CASE Esc$
- COLOR 7, 0
- CLS : END
- CASE Enter$
- SELECT CASE MenuRow
- CASE 1 'view All Customers
- CLS
- Showcustomers
- EXIT DO
- CASE 2 'edit A Customer Record
- CLS
- Showcustomers
- IF Y$ <> Esc$ THEN
- Editcustomer
- END IF
- EXIT DO
- CASE 3 'add A Customer Record
- CLS
- Editcustomer
- EXIT DO
- CASE 4 'print All Customer Records
- CLS
- Printrecords
- EXIT DO
- CASE 5 'quit
- COLOR 7, 0
- CLOSE : CLS : END
- END SELECT
- CASE Uparrow$
- MenuRow = MenuRow - 1
- IF MenuRow < 1 THEN MenuRow = Noofselections
- CASE Dnarrow$
- MenuRow = MenuRow + 1
- IF MenuRow > Noofselections THEN MenuRow = 1
- END SELECT
- LOOP
- LOOP
- END SUB
-
- '------------------------------------------------------------------------------
- SUB Sortindex
- SHARED Maxrows,Currec,N(),N$()
- IF Maxrows < 1 THEN EXIT SUB
- Maxarray% = Maxrows
- REDIM Stackl%(Maxarray%), Stackr%(Maxarray%)
- Sx% = 1: Stackl%(1) = 1: Stackr%(1) = Maxarray%
- WHILE Sx% <> 0
- Lx% = Stackl%(Sx%): Rx% = Stackr%(Sx%): Sx% = Sx% - 1
- WHILE Lx% < Rx%
- Ix% = Lx%: Jx% = Rx%: X$ = N$((Lx% + Rx%) \ 2)
- WHILE Ix% <= Jx%
- WHILE N$(Ix%) < X$: Ix% = Ix% + 1: WEND
- WHILE N$(Jx%) > X$: Jx% = Jx% - 1: WEND
- X0% = 0
- WHILE (Ix% <= Jx% AND X0% = 0)
- X0% = 1: SWAP N$(Ix%), N$(Jx%)
- SWAP N(Ix%), N(Jx%)
- Ix% = Ix% + 1: Jx% = Jx% - 1
- WEND
- WEND
- X0% = 0
- WHILE (Ix% <= Rx% AND X0% = 0)
- X0% = 1: Sx% = Sx% + 1
- Stackl%(Sx%) = Ix%: Stackr%(Sx%) = Rx%
- WEND
- Rx% = Jx%
- WEND
- WEND
- ERASE Stackl%, Stackr%
- END SUB
-
- '------------------------------------------------------------------------------
- SUB Updaterec
- SHARED Maxrows,Currec,N(),N$()
- PUT #1, Currec, Custrec
- END SUB